处理用户输入
您可以设置应用程序中的哪些元素与用户输入交互以及如何交互。在 Kanzi 中,要处理用户输入,您可以:
- 启用节点的手势识别。请参阅使用输入操纵器。
- 定义哪些节点接收用户输入。请参阅 定义哪个节点接收用户输入。
- 设置节点输入区的大小。请参阅 设置输入区的大小。
- 设置哪些节点与键盘输入交互以及如何交互请参阅 处理用户输入。

对于不必手动创建操纵器的 Kanzi 节点,因为它们默认会处理输入:
- 按钮 (Button) 节点。请参阅 使用按钮 (Button) 节点。
- 切换按钮 (Toggle Button) 节点。请参阅 使用切换按钮 (Toggle Button) 节点。
- 列表框 (List Box) 节点。请参阅 列表框 (List Box) 节点。
- 列表框项容器 (List Box Item Container) 预设件。请参阅 使用列表框项容器 (List Box Item Container) 预设件。
- 滚动视图 (Scroll View) 节点。请参阅 使用滚动视图 (Scroll View) 节点。
- 滑块 (Slider) 节点。请参阅 使用 滑块 (Slider) 节点。
触发器和动作可用于创建基于用户输入的交互。请参阅 使用触发器。
使用输入操纵器
Kanzi提供低级别和高级别的输入访问:
- 高级别系统提供手势输入,如点击、平移和捏合等。建议使用高级别系统将手势绑定到 UI 组件或应用程序功能。
- 低级别输入系统报告在节点中发生的原始触摸事件。
Kanzi 提供输入操纵器,为 Kanzi 工程中的节点启用手势识别。您可以通过 API 分配操纵器。
Kanzi 提供这些输入操纵器:
- 使用点击操纵器可以使用户在 Kanzi 应用程序中点击或轻敲节点。请参阅 使用点击操纵器。
- 使用长按操纵器可以使用户在 Kanzi 应用程序中长按节点。请参阅 使用长按操纵器。
- 使用多击操纵器可以使用户在 Kanzi 应用程序中多击或多敲节点。请参阅 使用多击操纵器。
- 使用拖放操纵器可以使用户在 Kanzi 应用程序中拖放节点。请参阅 使用拖放操纵器。
- 使用平移操纵器可以使用户在 Kanzi 应用程序中移动节点。请参阅 使用平移操纵器。
- 使用捏合操纵器可以使用户在 Kanzi 应用程序中缩放和旋转节点。请参阅 使用捏合操纵器。
InputManipulator 是操纵器基本类,诸如 ClickManipulator::create 和 PanManipulator::create 等函数创建负责相应手势识别的输入操纵器。
当您创建输入操纵器时,要组织手势,通过 Node::addInputManipulator 将其连接到节点。这也会连接节点的所有子节点。
连接的操纵器可产生消息,以响应用户动作。各操纵器通过消息报告手势识别期间的不同事件,例如平移操纵器的 PanManipulator::StartedMessage、PanManipulator::MovedMessage、PanManipulator::FinishedMessage 等等。
定义哪个节点接收用户输入
创建用户界面时,特别注意您的应用程序如何处理用户输入,因为一次仅一个节点可以接收用户输入。例如,定义点击是由前面的节点还是后面的节点处理。
Kanzi 采用命中测试来确定接收输入的节点。实际上,命中测试基于输入事件的屏幕坐标从摄像机向 3D 场景投射射线。
默认情况下,按钮 (Button)、列表框项容器 (List Box Item Container)、滚动视图 (Scroll View) 和 滑块 (Slider) 节点启用命中测试。要为任何类型的节点启用命中测试,向该节点添加可测试命中 (Hit Testable) 属性并启用。
边框相交并且已启用 可测试命中 (Hit Testable) 属性的 摄像机 (Camera) 节点的第一个节点接收输入,执行事件并生成设置动作,如发送点击消息。
例如,如果您放置两个方框 (Box) 节点,使BoxFront 节点位于BoxRear 节点之前并完全挡住它:
- BoxFront 节点的 可测试命中 (Hit Testable) 属性启用时,BoxFront 节点接收输入。
- 以下情况下,BoxRear 节点即使被 BoxFront 节点挡住也接收输入:
- BoxFront 节点的 可测试命中 (Hit Testable) 属性已禁用
- BoxRear 节点的 可测试命中 (Hit Testable) 属性已启用
设置输入区的大小
当您要更改节点接收输入的输入区,使用可测试命中容器 (Hit Testable Container) 属性。在 Kanzi 中,所有节点的命中测试默认基于各节点的布局尺寸。使用可测试命中容器 (Hit Testable Container) 属性在输入区中包括具有该属性的节点布局尺寸、以及该节点任何子节点的布局尺寸,而非该节点的包围盒。
默认情况下,按钮 (Button)、列表框项容器 (List Box Item Container)、滚动视图 (Scroll View) 和 3D 滑块 (Slider 3D) 节点启用可测试命中容器 (Hit Testable Container) 属性。要设置任何其他类型的节点输入区的大小,添加并启用可测试命中容器 (Hit Testable Container) 和可测试命中 (Hit Testable) 属性。
例如,包含方框 (Box) 节点的 3D 堆栈布局 (Stack Layout 3D) 节点接收点击输入:
- 当 3D 堆栈布局 (Stack Layout 3D) 节点的可测试命中容器 (Hit Testable Container) 属性被禁用,接收来自方框 (Box) 节点宽度 (Width)、高度 (Height) 和深度 (Depth) 属性定义区域的输入
- 当 3D 堆栈布局 (Stack Layout 3D) 节点的可测试命中容器 (Hit Testable Container) 属性启用时,接收来自 3D 堆栈布局 (Stack Layout 3D) 和方框 (Box) 节点的布局宽度 (Layout Width)、布局高度 (Layout Height) 和布局深度 (Layout Depth) 属性定义区域的输入